#include <chrono>
#include <iostream>
#include <mutex>
#include <string>
#include <thread>

class Singleton {
public:
    static Singleton* getInstance() {  // 对外接口，通过这个获取单例
        return instance;
    }
    std::string value() const { return _value; }

protected:
    Singleton(const std::string value) : _value(value) {};  // 构造函数设为私有
    Singleton(Singleton& other) = delete;                   // 删除拷贝构造函数
    void operator=(const Singleton&) =
        delete;  // 删除拷贝赋值运算符，类的用户不能对单例对象进行拷贝赋值操作

    static Singleton* instance;  // 单例为静态成员变量，类内声明，类外初始化
    std::string _value;
};

Singleton* Singleton::instance = new Singleton("Foo");  // 类外初始化静态变量

int main() {
    Singleton* singleton1 = Singleton::getInstance();  // 获取唯一单例
    std::cout << "value: " << singleton1->value() << "\n";
    Singleton* singleton2 = Singleton::getInstance();
    std::cout << "value: " << singleton2->value() << "\n";
    return 0;
}